import { ChainId } from '@pancakeswap/chains'
import { Address } from 'viem'

export const INFINITY_SUPPORTED_CHAINS = [ChainId.BSC, ChainId.BSC_TESTNET, ChainId.SEPOLIA, ChainId.BASE] as const

export type InfinitySupportedChains = (typeof INFINITY_SUPPORTED_CHAINS)[number]

export const INFI_VAULT_ADDRESSES: Record<InfinitySupportedChains, Address> = {
  [ChainId.BSC]: '0x238a358808379702088667322f80aC48bAd5e6c4',
  [ChainId.BSC_TESTNET]: '0x2CdB3EC82EE13d341Dc6E73637BE0Eab79cb79dD',
  [ChainId.SEPOLIA]: '0x4670F769Daa625FF5F89719AE5295E9824f5805f',
  [ChainId.BASE]: '0x238a358808379702088667322f80aC48bAd5e6c4',
}

export const INFI_CL_POOL_MANAGER_ADDRESSES: Record<InfinitySupportedChains, Address> = {
  [ChainId.BSC]: '0xa0FfB9c1CE1Fe56963B0321B32E7A0302114058b',
  [ChainId.BSC_TESTNET]: '0x36A12c70c9Cf64f24E89ee132BF93Df2DCD199d4',
  [ChainId.SEPOLIA]: '0xD4EAc75ee0E76EAD6AC6995DF30CA14b38549682',
  [ChainId.BASE]: '0xa0FfB9c1CE1Fe56963B0321B32E7A0302114058b',
}

export const INFI_BIN_POOL_MANAGER_ADDRESSES: Record<InfinitySupportedChains, Address> = {
  [ChainId.BSC]: '0xC697d2898e0D09264376196696c51D7aBbbAA4a9',
  [ChainId.BSC_TESTNET]: '0xe71d2e0230cE0765be53A8A1ee05bdACF30F296B',
  [ChainId.SEPOLIA]: '0x0Ca8430E263A098B998E47e0544C2C82B30CbDB1',
  [ChainId.BASE]: '0xC697d2898e0D09264376196696c51D7aBbbAA4a9',
}

export const INFI_CL_POSITION_MANAGER_ADDRESSES: Record<InfinitySupportedChains, Address> = {
  [ChainId.BSC]: '0x55f4c8abA71A1e923edC303eb4fEfF14608cC226',
  [ChainId.BSC_TESTNET]: '0x77DedB52EC6260daC4011313DBEE09616d30d122',
  [ChainId.SEPOLIA]: '0x53C9802F47295979c0E154779eD10fa6af27D7cA',
  [ChainId.BASE]: '0x55f4c8abA71A1e923edC303eb4fEfF14608cC226',
}

export const INFI_BIN_POSITION_MANAGER_ADDRESSES: Record<InfinitySupportedChains, Address> = {
  [ChainId.BSC]: '0x3D311D6283Dd8aB90bb0031835C8e606349e2850',
  [ChainId.BSC_TESTNET]: '0x68B834232da911c787bcF782CED84ec5d36909a7',
  [ChainId.SEPOLIA]: '0x21015eF9927e06b7Fc19D986A214e449Aa22FF7d',
  [ChainId.BASE]: '0x3D311D6283Dd8aB90bb0031835C8e606349e2850',
}

export const INFI_CL_QUOTER_ADDRESSES: Record<InfinitySupportedChains, Address> = {
  [ChainId.BSC]: '0xd0737C9762912dD34c3271197E362Aa736Df0926',
  [ChainId.BSC_TESTNET]: '0x5d544D0ad627a72d7Fb53c22D8888663FC5d5B0d',
  [ChainId.SEPOLIA]: '0x6B71bA938100FD313Be08E680639900E0cfE3d74',
  [ChainId.BASE]: '0xd0737C9762912dD34c3271197E362Aa736Df0926',
}

export const INFI_BIN_QUOTER_ADDRESSES: Record<InfinitySupportedChains, Address> = {
  [ChainId.BSC]: '0xC631f4B0Fc2Dd68AD45f74B2942628db117dD359',
  [ChainId.BSC_TESTNET]: '0x82E7741E3DE763692785cfDB536D168B1226c4d5',
  [ChainId.SEPOLIA]: '0x4DcaF8f6040B12a2C6149956Cc2e36FA3b7a60b9',
  [ChainId.BASE]: '0xC631f4B0Fc2Dd68AD45f74B2942628db117dD359',
}

export const INFI_MIXED_QUOTER_ADDRESSES: Record<InfinitySupportedChains, Address> = {
  [ChainId.BSC]: '0x2dCbF7B985c8C5C931818e4E107bAe8aaC8dAB7C',
  [ChainId.BSC_TESTNET]: '0xdf70a0A2DADC2a01dbE165702aa6dCdf034628b0',
  [ChainId.SEPOLIA]: '0x3F47BDA24e069FC5f28B74d4FAB27EeBA006eF92',
  [ChainId.BASE]: '0x2dCbF7B985c8C5C931818e4E107bAe8aaC8dAB7C',
}

export const INFI_CL_MIGRATOR_ADDRESSES: Record<InfinitySupportedChains, Address> = {
  [ChainId.BSC]: '0x',
  [ChainId.BSC_TESTNET]: '0x8637035016cbF8E38519c9A1362b1fDDcA1c1A91',
  [ChainId.SEPOLIA]: '0x32D31C2020868057E0ba5876c1710962978d3EC3',
  [ChainId.BASE]: '0x',
}

export const INFI_BIN_MIGRATOR_ADDRESSES: Record<InfinitySupportedChains, Address> = {
  [ChainId.BSC]: '0x',
  [ChainId.BSC_TESTNET]: '0x3bA139617F8318ca7638b2470DA660653FB5F486',
  [ChainId.SEPOLIA]: '0x1A9A9e622dB78075fED5Cf77F382aA74CB657517',
  [ChainId.BASE]: '0x',
}

export const INFI_CL_LP_FEES_HELPER_ADDRESSES: Record<InfinitySupportedChains, Address> = {
  [ChainId.BSC]: '0x4e6825d29BbeA5F29Ee7AEfA40C3EAaBB27A9733',
  [ChainId.BSC_TESTNET]: '0x54DE53BD47F35A72Dc57A7A3e1a3B6EEB83b9cB4',
  [ChainId.SEPOLIA]: '0xF49bfc71F7C5C5489f9D1BF17B91c9726b919918',
  [ChainId.BASE]: '0x4e6825d29BbeA5F29Ee7AEfA40C3EAaBB27A9733',
}

export const INFI_FARMING_DISTRIBUTOR_ADDRESSES: Record<InfinitySupportedChains, Address> = {
  [ChainId.BSC]: '0xEA8620aAb2F07a0ae710442590D649ADE8440877',
  [ChainId.BSC_TESTNET]: '0xFBb5B0B69f89B75E18c37A8211C1f2Fa3B7D2728',
  [ChainId.SEPOLIA]: '0xB8f2A9f0427e4814023530b21D98DD0168d26258',
  [ChainId.BASE]: '0xEA8620aAb2F07a0ae710442590D649ADE8440877',
}

export const INFI_CL_PROTOCOL_FEE_CONTROLLER_ADDRESSES: Record<InfinitySupportedChains, Address> = {
  [ChainId.BSC]: '0x12F2a2965A665F8aBCf955C4dA26CC4Ec437b2c8',
  [ChainId.BSC_TESTNET]: '0x5ab6c844F3c0e818b92932e55b9942B2c8a2D205',
  [ChainId.SEPOLIA]: '0x',
  [ChainId.BASE]: '0x12F2a2965A665F8aBCf955C4dA26CC4Ec437b2c8',
}

export const INFI_BIN_PROTOCOL_FEE_CONTROLLER_ADDRESSES: Record<InfinitySupportedChains, Address> = {
  [ChainId.BSC]: '0xC7C41cc1F0f4BC4CA96ac860E5c724B9A265B9A8',
  [ChainId.BSC_TESTNET]: '0xB91451e44f5D1D8048F8b5c093b705D61C7893F8',
  [ChainId.SEPOLIA]: '0x',
  [ChainId.BASE]: '0xC7C41cc1F0f4BC4CA96ac860E5c724B9A265B9A8',
}

export const INFI_CL_TICK_LENS_ADDRESSES: { [key in ChainId]?: Address } = {
  [ChainId.BSC_TESTNET]: '0x05a732bb9A23256F57f9FdF255212979368Ece39',
  [ChainId.BSC]: '0x8BcF30285413F25032fb983C2bF4deFe29a33f3a',
  [ChainId.BASE]: '0x8bcf30285413f25032fb983c2bf4defe29a33f3a',
}
